// 导入数据库操作模块
const db = require('../db/index')
// 导入处理密码的模块
const bcrypt = require('bcryptjs')
const path = require("path");
const fs = require("fs");
const {it} = require("node:test");
const {login} = require("./user");


// 上传头像链接的处理函数
exports.addCover = (req, res) => {
    const imgUrl = `http://127.0.0.1:9090/${req.file.filename}`
    res.send({status: 0, url: imgUrl})
}

// 增加-动态的处理函数
exports.addNew = (req, res) => {
    // 获取客户端提交到服务器的用户信息
    const micInfo = req.body
    console.log(micInfo)
    const sqlStr = 'SELECT username,user_pic FROM bs_users WHERE id=?'
    db.query(sqlStr, req.user.id, (err, results) => {
        // 执行 SQL 语句失败
        if (err) return res.cc(err)
        const sql = 'insert into bs_dynamic set ?'
        db.query(sql, {
            ...micInfo,
            aut_id: req.user.id,
            aut_name: results[0].username,
            aut_pic: results[0].user_pic
        }, (err, result) => {
            // 判断 SQL 语句是否执行成功
            if (err) return res.cc(err)
            if (result.affectedRows !== 1) return res.cc('数据录入失败，请稍后再试！')
            // 成功
            res.cc({
                ...micInfo,
                aud_id: req.user.id,
                aut_name: results[0].username,
                aut_pic: results[0].user_pic
            }, 0)
        })
    })

}

// 获取-指定用户动态的处理函数
exports.postUserMic = (req, res) => {
    const sql = `SELECT * FROM bs_dynamic WHERE rangeView!='false' AND aut_id=? AND is_deleted=0`
    // 调用 db.query() 执行 SQL 语句
    // db.query(sql, 2, (err, results) => {
    db.query(sql, req.body.userId, (err, results) => {
    // db.query(sql, 2, (err, results) => {
        // 执行 SQL 语句失败
        if (err) return res.cc(err)
        // 执行 SQL 语句成功，但是查询的结果可能为空
        if (results.length === 0) return res.cc({status:false,text:'此人无动态'})
        // const attitude=results.some(item=>item.likedIds.split('%').includes(req.user.id))?'1':'-1'
        // console.log(req.user.id)
        const micDataList = results.map(item => String(item.likedIds).split('%').includes(String(req.user.id))
            ? {...item, attitude: 1}
            : {...item, attitude: -1})
        res.cc(micDataList, 0)
    })
}

// 删除-动态的处理函数
exports.deleteMic = (req, res) => {
    console.log(req.params.target)
    const sql = 'UPDATE bs_dynamic set is_deleted=1 WHERE mic_id=?'
    db.query(sql, req.params.target, (err, result) => {
        // 判断 SQL 语句是否执行成功
        if (err) return res.cc(err)
        if (result.affectedRows !== 1) return res.cc('数据录入失败，请稍后再试！')
        // 成功
        res.cc('更新成功！', 0)
    })
}

// 获取-动态的处理函数(分三种不同的权限)
exports.getMic = (req, res) => {
    const sql = `SELECT * FROM bs_dynamic WHERE rangeView=? AND is_deleted=0`
    // 调用 db.query() 执行 SQL 语句
    db.query(sql, req.body.status, (err, results) => {
        // 执行 SQL 语句失败
        if (err) return res.cc(err)
        // 执行 SQL 语句成功，但是查询的结果可能为空
        if (results.length === 0) return res.cc('获取信息失败！')
        const micIds= results.map(item =>{return item.mic_id})
        const sql='SELECT mic_id FROM bs_comments WHERE mic_id IN('+'?,'.repeat(micIds.length).slice(0,-1)+')'
        db.query(sql,micIds,(err,result,fields)=>{
            // 执行 SQL 语句失败
            if (err) return res.cc(err)
            // console.log(result[0])
            let countResult = {};
            result.forEach((item) => {
                if (countResult[item.mic_id]) {
                    // 已经存在的话将计数加一
                    countResult[item.mic_id] += 1;
                } else {
                    // 创建一个新的 mic_id 并设置计数为 1
                    countResult[item.mic_id] = 1;
                }
            });
            // console.log(countResult)
            const micDataList = results.map(item => String(item.likedIds).split('%').includes(String(req.user.id))
                ? {...item, attitude: 1}
                : {...item, attitude: -1})

            const countObjKeys = Object.keys(countResult);

            micDataList.forEach((item) => {
                const key = item.mic_id;
                if (countObjKeys.includes(String(key))) {
                    item.countNum = countResult[key];
                }
            });

            res.cc(micDataList, 0)
        })

    })
}

// 获取-指定用户点赞动态的处理函数
exports.postUserLikedMic = (req, res) => {
    const sql = "SELECT * FROM bs_dynamic WHERE rangeView='true' AND is_deleted=0 "
    // 调用 db.query() 执行 SQL 语句
    db.query(sql, (err, results) => {
        // 执行 SQL 语句失败
        if (err) return res.cc(err)
        // 执行 SQL 语句成功，但是查询的结果可能为空
        if (results.length === 0) return res.cc({status:false,text:'此人无点赞'})
        const filterArr=results.filter(item=>item.likedIds&&item.likedIds.includes(String(req.body.userId)))
        res.cc(filterArr, 0)
    })
}

// 点赞 的处理函数
exports.addLike = (req, res) => {
    const sqlStr = 'SELECT likedIds FROM bs_dynamic WHERE mic_id=? AND is_deleted=0'
    db.query(sqlStr, req.body.target, (err, results) => {
        // 执行 SQL 语句失败
        if (err) return res.cc(err)
        results[0].likedIds
            ? results[0].likedIds += req.user.id + '%'
            : results[0].likedIds = req.user.id + '%'

        const sql = 'UPDATE bs_dynamic set likedIds=? WHERE mic_id=?'
        db.query(sql, [results[0].likedIds, req.body.target], (err, result) => {
            // 判断 SQL 语句是否执行成功
            if (err) return res.cc(err)
            if (result.affectedRows !== 1) return res.cc('数据录入失败，请稍后再试！')
            // 成功
            res.cc('更新成功！', 0)
        })
    })

}

// 取消点赞 的处理函数
exports.deleteLike = (req, res) => {
    // console.log(req.params.target)
    const sqlStr = 'SELECT likedIds FROM bs_dynamic WHERE mic_id=? AND is_deleted=0'
    db.query(sqlStr, req.params.target, (err, results) => {
        // 执行 SQL 语句失败
        if (err) return res.cc(err)
        let likeArr = results[0].likedIds.split('%').filter(item => !item.trim() === false)
        const index = likeArr.indexOf(String(req.user.id))
        if (index !== -1) likeArr.splice(index, 1)
        // console.log(likeArr)
        let likeStr
        if (likeArr.length === 0) {
            likeStr = null
        } else if (likeArr.length === 1) {
            likeStr = likeArr.join('%') + '%'
        } else {
            likeStr = likeArr.join('%')

        }
        console.log(likeStr)
        const sql = 'UPDATE bs_dynamic set likedIds=? WHERE mic_id=? AND is_deleted=0'
        db.query(sql, [likeStr, req.params.target], (err, result) => {
            // 判断 SQL 语句是否执行成功
            if (err) return res.cc(err)
            if (result.affectedRows !== 1) return res.cc('数据录入失败，请稍后再试！')
            // 成功
            res.cc('更新成功！', 0)
        })
    })
}
